(deftemplate persoana
(multislot nume)
(slot ochi)
(slot par)
(slot nationalitate)
)

(assert (persoana (nume Ion Ionescu)(ochi verzi)(par saten)(nationalitate franceza)))
(assert (persoana (nume Bogdan Popescu)(ochi caprui)(par blond)(nationalitate germana)))
(assert (persoana (nume Ionel Romanu)(ochi albastri)(par blond)(nationalitate germana)))
(assert (persoana (nume Cristi Ardelean)(ochi verzi)(par blond)(nationalitate germana)))
(assert (persoana (nume Popescu Mihai)(ochi purpurii)(par castaniu)(nationalitate romana)))

(defrule rule1
(persoana (nume $? ?nume ?prenume)(ochi verzi)(par saten)(nationalitate franceza))
=>
(printout t "Regula 1 -> Nume: "?nume ,"  Prenume: "?prenume crlf)
)

(defrule rule2
    (persoana(nume $? ?p ?n)(ochi ?co & ~albastri)(par ?cp & ~negru))
    (not(persoana(nume $? ?p1 & ~?p ?n1 & ~?n)(ochi ?co)))
    (not(persoana(nume $? ?p2 & ~?p ?n2 & ~?n)(par ?co)))
    =>
    (printout t "Regula 2 -> Persoana : " ?p , ?n " este cea cautata." crlf)
    )

(defrule rule3
    (persoana(nume $? ?p ?n)(par ?cp & ~blond)(ochi ?co)(nationalitate german))
    (test(or(eq ?co albastru)(eq ?cp saten)))
    (persoana(nume $? ?p1&~p ?n1&~n)(par ?cp)(ochi ?co & verde))
    =>
    (printout f "Regula 3 -> nume: " ?n crlf)
    )

(defrule rule4
(exists (persoana (nume Popescu Mihai) (ochi purpurii)(par castaniu)(nationalitate romana)))
=>
(printout t "Regula 4 ->  persoane cu ochi caprui" crlf)
)

(run)

